package com.zyp.resoponsibility;


/**
 *	
 *	抽象请求处理者 
 *
 *	demo:按一个请假流程，项目经理能批3天一下的假期，部门经理能批5天，总经理看心情
 *
 */
public abstract class IHandler {
	
	/**
	 * 持有后继的责任对象，下一层处理对象
	 */
	protected IHandler handler;

	public IHandler getHandler() {
		return handler;
	}

	public void setHandler(IHandler handler) {
		this.handler = handler;
	}
	
	/**
	 * 具体的处理请求的方法
	 * @param days
	 */
	public abstract void handleRequest(int days);

}

/**
 * 
 * 处理对象：项目经理 能批三天以内的假期
 *	
 */
class Manager extends IHandler{

	public void handleRequest(int days) {
		if(days<=3){
			System.out.println("项目经理批准："+days);
		}else if(days>3){
			if(getHandler()!=null){
				getHandler().handleRequest(days);
			}else{
				System.out.println("没有上级，看项目经理的啦！");
			}
		}
	}
}
/**
 * 
 * 处理对象：部门经理 能批5天以内的假期
 *	
 */
class DepartmentManager extends IHandler{

	public void handleRequest(int days) {
		if(days>3&&days<=5){
			System.out.println("部门经理批准："+days);
		}else if(days>5){
			if(getHandler()!=null){
				getHandler().handleRequest(days);
			}else{
				System.out.println("没有上级，看部门经理的啦！");
			}
		}
	}
}

/**
 * 
 * 处理对象：部门经理 能批5天以内的假期
 *	
 */
class GeneralManager extends IHandler{

	public void handleRequest(int days) {
		if(days<10){
			System.out.println("总经理批准："+days);
		}else{
			System.out.println("请假："+days+" 天,总经理看心情");
		}
	}
}
